package cn.doitedu.day07

/**
 * scala中的泛型
 * 泛型功能：1.类型约束 2.程序更加灵活
 * scala的泛型表现形式更丰富一些（花样太多了）
 *
 */

//上下文界定，也是为了实现隐式转换，必须有一个隐式参数（通常object类型，也可以是class类型）
class Pair4[T: Ordering] {

  //传入两个类型一样的参数，返回大的
  def bigger(first: T, second: T): T = {
    val ord = implicitly[Ordering[T]] // implicitly强制的类型转换
    if (ord.gteq(first, second)) first else second
  }

}

class Girl(val name: String, val fv: Double) {


  override def toString = s"Girl($name, $fv)"
}

object Pair4 {


  def main(args: Array[String]): Unit = {

    val g1 = new Girl("lili", 99.99)
    val g2 = new Girl("xinxin", 99.98)


    import MyPreDef2.OrderingGirl
    val p = new Pair4[Girl]
    val r = p.bigger(g1, g2)
    println(r)


  }

}



